﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Entidad;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Logic.ControlExeption;


namespace Crosland.Automotriz.Web.Vehiculos
{
    public partial class wFrmCreditoClienteGarantiaActualizar : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
                this.ValidaOpereacion();
                
            }
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            this.Buscar();
        }

        private void Buscar()
        {
            try
            {
                clsTD_ClienteBL blCliente = new clsTD_ClienteBL();
                string DES_CLIENTE = txtBuscarNombre.Text.Trim();
                string NIF = txtBuscarRUC.Text.Trim();
                int filas = int.Parse(cboOpcion.SelectedItem.Value.ToString());
                gvBusqueda.DataSource = blCliente.ListarClientePorNombre(DES_CLIENTE, NIF, filas);
                gvBusqueda.DataBind();
            }
            catch (Exception ex)
            {

                throw;
            }


        }

        private void BuscarPorCodigo()
        {
            try
            {
                clsTD_ClienteBL blCliente = new clsTD_ClienteBL();

                if (txtCodigo.Text.Trim() != String.Empty)
                {

                    List<Crosland.Automotriz.Entidad.TD_CLIENTE> lista = blCliente.ListarClientePorCodigo(txtCodigo.Text.Trim());

                    if (lista != null)
                    {
                        lblId_Cliente.Text = lista[0].ID_CLIENTE.ToString();
                        txtCliente.Text = lista[0].DES_CLIENTE.ToString();
                        txtdireccion.Text = lista[0].DES_DIRECCION.ToString();
                        txtdepartamento.Text = lista[0].Departamento.ToString();
                        txtprovincia.Text = lista[0].Provincia.ToString();
                        txtdistrito.Text = lista[0].Distrito.ToString();
                    }
                    return;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }


        }

        private void ListarTipoCredito()
        {
            try
            {
                clsT_Cre_Cliente_GarantiaLogic l = new clsT_Cre_Cliente_GarantiaLogic();
                cboTipoCredito.DataSource = l.ListaTipoCredito();
                cboTipoCredito.TextField = "DES_CORTA";
                cboTipoCredito.ValueField = "ID_GENERAL_DET";
                cboTipoCredito.DataBind();

            }
            catch (Exception)
            {

                throw;
            }


        }

        private void ListarCreditoBanco()
        {

            try
            {
                clsT_Cre_Cliente_GarantiaLogic l = new clsT_Cre_Cliente_GarantiaLogic();
                cboBanco.DataSource = l.ListarCreditoBanco();
                cboBanco.TextField = "DES_CORTA";
                cboBanco.ValueField = "ID_GENERAL_DET";
                cboBanco.DataBind();


            }
            catch (Exception)
            {

                throw;
            }

        }

        private void ListarOrganizacion()
        {

            try
            {
                clsTd_Org_VtaLogic clstd_org_vtalogic = new clsTd_Org_VtaLogic();
                List<Crosland.Automotriz.Core.TD_ORG_VTA> lista = clstd_org_vtalogic.lista();
                grdOrganizacion.DataSource = lista;
                grdOrganizacion.DataBind();

                if (Session["operacion"].ToString() == "M")
                {

                    clsT_Cre_Cliente_GarantiaLogic clst_cre_cliente_garantia = new clsT_Cre_Cliente_GarantiaLogic();
                    var q = from ug in clst_cre_cliente_garantia.ListaClienteGarantiaOrgVta(Convert.ToInt32(Session["ID_CRE_CLIENTE_GARANTIA"]))
                          select ug;
                    foreach (var item in q)
                    {
                        for (int i = 0; i < lista.Count; i++)
                        {
                            if (item.ID_ORG_VTA == lista[i].ID_ORG_VTA)
                            {
                                grdOrganizacion.Selection.SetSelection(i, true);

                                break;

                            }
                        }
                    }
                }
            }
            catch (Exception)
            {

                throw;
            }

        }

        private void Insertar()
        {

            try
            {
                Boolean boolResultado1 = false;
                Boolean boolResultado2 = false;
                Boolean boolResultado3 = false;
                clsT_Cre_Cliente_GarantiaLogic clst_cre_cliente_garantia = new clsT_Cre_Cliente_GarantiaLogic();
                T_CRE_CLIENTE_GARANTIA t_cre_cliente_garantia = new T_CRE_CLIENTE_GARANTIA();
                T_CRE_CLIENTE_GARANTIA_ORG_VTA t_cre_cliente_garantia_org_vta = new T_CRE_CLIENTE_GARANTIA_ORG_VTA();
                int intIDCreClienteGarantia = clst_cre_cliente_garantia.UltimoNumeroT_CRE_CLIENTE_GARANTIA() + 1;
                t_cre_cliente_garantia.ID_CRE_CLIENTE_GARANTIA = intIDCreClienteGarantia;
                t_cre_cliente_garantia.ID_CLIENTE = int.Parse(lblId_Cliente.Text);
                boolResultado1 = clst_cre_cliente_garantia.Insertar_T_CRE_CLIENTE_GARANTIA(t_cre_cliente_garantia);
                if (boolResultado1)
                {

                    /*inserta T_CRE_CLIENTE_GARANTIA_ORG_VTA*/

                    for (int i = 0; i < grdOrganizacion.VisibleRowCount; i++)
                    {
                        if (grdOrganizacion.Selection.IsRowSelected(i))
                        {
                            int intIDCreClienteGarantiaOrgVta = clst_cre_cliente_garantia.UltimoNumeroT_CRE_CLIENTE_GARANTIA_ORG_VTA() + 1;
                            t_cre_cliente_garantia_org_vta.ID_CRE_CLIENTE_GARANTIA_ORG_VTA = intIDCreClienteGarantiaOrgVta;
                            t_cre_cliente_garantia_org_vta.ID_CRE_CLIENTE_GARANTIA = intIDCreClienteGarantia;
                            t_cre_cliente_garantia_org_vta.ID_GARANTIA_TIPO = cboTipoCredito.Value == null ? 0 : int.Parse(cboTipoCredito.Value.ToString());
                            t_cre_cliente_garantia_org_vta.ID_ORG_VTA = Convert.ToInt32(grdOrganizacion.GetRowValues(i, "ID_ORG_VTA"));
                            boolResultado2 = clst_cre_cliente_garantia.Insertar_T_CRE_CLIENTE_GARANTIA_ORG_VTA(t_cre_cliente_garantia_org_vta);

                        }

                    }
                    T_CRE_CLIENTE_GARANTIA_TIPO t_cre_cliente_garantia_tipo = new T_CRE_CLIENTE_GARANTIA_TIPO();
                    int intID_CRE_CLIENTE_GARANTIA_TIPO = clst_cre_cliente_garantia.UltimoNumeroT_CRE_CLIENTE_GARANTIA_TIPO() + 1;
                    t_cre_cliente_garantia_tipo.ID_CRE_CLIENTE_GARANTIA_TIPO = intID_CRE_CLIENTE_GARANTIA_TIPO;
                    t_cre_cliente_garantia_tipo.ID_CRE_CLIENTE_GARANTIA = intIDCreClienteGarantia;
                    t_cre_cliente_garantia_tipo.ID_GARANTIA_TIPO = cboTipoCredito.Value == null ? 0 : int.Parse(cboTipoCredito.Value.ToString());
                    t_cre_cliente_garantia_tipo.FEC_VENCIMIENTO = txtFechaVencimiento.Date;
                    t_cre_cliente_garantia_tipo.IMP_AUTORIZADO_SOLES = txtImpAutorizadoSoles.Text == String.Empty ? 0 : decimal.Parse(txtImpAutorizadoSoles.Text);
                    t_cre_cliente_garantia_tipo.IMP_AUTORIZADO_DOLARES = txtImpAutorizadoDolar.Text == String.Empty ? 0 : decimal.Parse(txtImpAutorizadoDolar.Text);
                    t_cre_cliente_garantia_tipo.ID_ENTIDAD_GARANTE = cboBanco.Value == null ? 0 : int.Parse(cboBanco.Value.ToString());
                    t_cre_cliente_garantia_tipo.NRO_MAX_UNID_2R = txtNroUnidad2r.Text == String.Empty ? 0 : int.Parse(txtNroUnidad2r.Text);
                    t_cre_cliente_garantia_tipo.NRO_MAX_UNID_3R = txtNroUnidad3r.Text == String.Empty ? 0 : int.Parse(txtNroUnidad3r.Text);
                    t_cre_cliente_garantia_tipo.NRO_DIAS_CREDITO = txtnroDiasCredito.Text == String.Empty ? 0 : int.Parse(txtnroDiasCredito.Text);
                    t_cre_cliente_garantia_tipo.FEC_ACTUALIZACION = DateTime.Now;
                    t_cre_cliente_garantia_tipo.COD_USUARIO_ACTUALIZA = Session["User"].ToString();
                    t_cre_cliente_garantia_tipo.ES_VIGENTE = true;
                    boolResultado3 = clst_cre_cliente_garantia.Insertar_T_CRE_CLIENTE_GARANTIA_TIPO(t_cre_cliente_garantia_tipo);
                }

                if (boolResultado1 == true && boolResultado2 == true && boolResultado3 == true)
                {
                    lblMensaje.Text = "Se registró correctamente";
                    popupErrores.ShowOnPageLoad = true;
                    this.LimpiarControles();
                    Session["operacion"] = "N";

                }              

            }
            catch (Exception ex)
            {

                GuardarExceptionLog("Error en la aplicación", ex, "Insertar");
                MensajesError("Error en la aplicación", ex, "Insertar");     


            }

        }


        private void LimpiarControles() {

            txtCodigo.Text = String.Empty;
            lblId_Cliente.Text = String.Empty;
            txtCliente.Text = String.Empty;
            txtdepartamento.Text = String.Empty;
            txtdireccion.Text = String.Empty;
            txtprovincia.Text = String.Empty;
            txtNroUnidad3r.Text = String.Empty;
            txtNroUnidad2r.Text = String.Empty;
            txtFechaVencimiento.Text = String.Empty;
            txtnroDiasCredito.Text = String.Empty;
            txtImpAutorizadoDolar.Text = String.Empty;
            txtImpAutorizadoSoles.Text = string.Empty;
            cboBanco.Text = String.Empty;
            cboTipoCredito.Text = String.Empty;
            grdOrganizacion.Selection.UnselectAll();
        
        
        }


        private void Modificar() {

            try
            {
                Boolean boolResultOrg = false;
                Boolean boolResultTipo = false;
                Boolean boolResultado = false;
                clsT_Cre_Cliente_GarantiaLogic clst_cre_cliente_garantia = new clsT_Cre_Cliente_GarantiaLogic();
       
                T_CRE_CLIENTE_GARANTIA_ORG_VTA t_cre_cliente_garantia_org_vta = new T_CRE_CLIENTE_GARANTIA_ORG_VTA();
           
                int intID_CRE_CLIENTE_GARANTIA=Convert.ToInt32(Session["ID_CRE_CLIENTE_GARANTIA"]);

                boolResultOrg = clst_cre_cliente_garantia.Elimiar_T_CRE_CLIENTE_GARANTIA_ORG_VTA(intID_CRE_CLIENTE_GARANTIA);

                if (boolResultOrg)
                {

                    for (int i = 0; i < grdOrganizacion.VisibleRowCount; i++)
                    {
                        if (grdOrganizacion.Selection.IsRowSelected(i))
                        {
                            int intIDCreClienteGarantiaOrgVta = clst_cre_cliente_garantia.UltimoNumeroT_CRE_CLIENTE_GARANTIA_ORG_VTA() + 1;
                            t_cre_cliente_garantia_org_vta.ID_CRE_CLIENTE_GARANTIA_ORG_VTA = intIDCreClienteGarantiaOrgVta;
                            t_cre_cliente_garantia_org_vta.ID_CRE_CLIENTE_GARANTIA = intID_CRE_CLIENTE_GARANTIA;
                            t_cre_cliente_garantia_org_vta.ID_GARANTIA_TIPO = cboTipoCredito.Value == null ? 0 : int.Parse(cboTipoCredito.Value.ToString());
                            t_cre_cliente_garantia_org_vta.ID_ORG_VTA = Convert.ToInt32(grdOrganizacion.GetRowValues(i, "ID_ORG_VTA"));
                            boolResultado=clst_cre_cliente_garantia.Insertar_T_CRE_CLIENTE_GARANTIA_ORG_VTA(t_cre_cliente_garantia_org_vta);

                        }
                    }
                    boolResultTipo = clst_cre_cliente_garantia.Elimiar_T_CRE_CLIENTE_GARANTIA_TIPO(intID_CRE_CLIENTE_GARANTIA);
                    if (boolResultTipo)
                    {
                        T_CRE_CLIENTE_GARANTIA_TIPO t_cre_cliente_garantia_tipo = new T_CRE_CLIENTE_GARANTIA_TIPO();
                        int intID_CRE_CLIENTE_GARANTIA_TIPO = clst_cre_cliente_garantia.UltimoNumeroT_CRE_CLIENTE_GARANTIA_TIPO() + 1;
                        t_cre_cliente_garantia_tipo.ID_CRE_CLIENTE_GARANTIA_TIPO = intID_CRE_CLIENTE_GARANTIA_TIPO;
                        t_cre_cliente_garantia_tipo.ID_CRE_CLIENTE_GARANTIA = intID_CRE_CLIENTE_GARANTIA;
                        t_cre_cliente_garantia_tipo.ID_GARANTIA_TIPO = cboTipoCredito.Value == null ? 0 : int.Parse(cboTipoCredito.Value.ToString());
                        t_cre_cliente_garantia_tipo.FEC_VENCIMIENTO = txtFechaVencimiento.Date;
                        t_cre_cliente_garantia_tipo.IMP_AUTORIZADO_SOLES = txtImpAutorizadoSoles.Text == String.Empty ? 0 : decimal.Parse(txtImpAutorizadoSoles.Text);
                        t_cre_cliente_garantia_tipo.IMP_AUTORIZADO_DOLARES = txtImpAutorizadoDolar.Text == String.Empty ? 0 : decimal.Parse(txtImpAutorizadoDolar.Text);
                        t_cre_cliente_garantia_tipo.ID_ENTIDAD_GARANTE = cboBanco.Value == null ? 0 : int.Parse(cboBanco.Value.ToString());
                        t_cre_cliente_garantia_tipo.NRO_MAX_UNID_2R = txtNroUnidad2r.Text == String.Empty ? 0 : int.Parse(txtNroUnidad2r.Text);
                        t_cre_cliente_garantia_tipo.NRO_MAX_UNID_3R = txtNroUnidad3r.Text == String.Empty ? 0 : int.Parse(txtNroUnidad3r.Text);
                        t_cre_cliente_garantia_tipo.NRO_DIAS_CREDITO = txtnroDiasCredito.Text == String.Empty ? 0 : int.Parse(txtnroDiasCredito.Text);
                        t_cre_cliente_garantia_tipo.FEC_ACTUALIZACION = DateTime.Now;
                        t_cre_cliente_garantia_tipo.COD_USUARIO_ACTUALIZA = Session["User"].ToString();
                        t_cre_cliente_garantia_tipo.ES_VIGENTE = true;
                        boolResultado = clst_cre_cliente_garantia.Insertar_T_CRE_CLIENTE_GARANTIA_TIPO(t_cre_cliente_garantia_tipo);
                    }
                }


                if (boolResultado) {

                    lblMensaje.Text = "Se actualizó correctamente";
                    popupErrores.ShowOnPageLoad = true;
                }

            }
            catch (Exception ex)
            {

                GuardarExceptionLog("Error en la aplicación", ex, "Modificar");
                MensajesError("Error en la aplicación", ex, "Modificar");    
            }
        
        }


        private Boolean Validar()
        {

            bool validar = false;

            if (lblId_Cliente.Text.Trim() == String.Empty)
            {


                lblMensaje.Text = "Ingrese el cliente";
                popupErrores.ShowOnPageLoad = true;
                return validar = true;

            }
            else if (cboTipoCredito == null)
            {
                lblMensaje.Text = "Ingrese el tipo credito";
                popupErrores.ShowOnPageLoad = true;
                return validar = true;
            }
            else if (txtFechaVencimiento.Text == String.Empty)
            {

                lblMensaje.Text = "Ingrese la fecha Vencimiento";
                popupErrores.ShowOnPageLoad = true;
                return validar = true;

            }
            else if (cboBanco == null)
            {

                lblMensaje.Text = "Ingrese el banco";
                popupErrores.ShowOnPageLoad = true;
                return validar = true;

            }
            else if (grdOrganizacion.Selection.Count == 0)
            {

                lblMensaje.Text = "seleccione las organizaciones";
                popupErrores.ShowOnPageLoad = true;
                return validar = true;


            }
            return validar;
        }

        private void ValidaOpereacion()
        {
            this.ListarCreditoBanco();
            this.ListarTipoCredito();
            this.ListarOrganizacion();          
          if (Session["operacion"].ToString() == "M")
            {
                clsT_Cre_Cliente_GarantiaLogic cliente_garantia = new clsT_Cre_Cliente_GarantiaLogic();
                List<T_CREDITO_CLIENTE_GARANTIA> lista = cliente_garantia.ListaPorID_CRE_CLIENTE_GARANTIA(int.Parse(Session["ID_CRE_CLIENTE_GARANTIA"].ToString()));
                lblId_Cliente.Text = lista[0].ID_CLIENTE.ToString();         
                cboTipoCredito.Value = lista[0].ID_TIPO_CREDITO.ToString();
                txtImpAutorizadoSoles.Text = lista[0].IMP_AUTORIZADO_SOLES.ToString();
                txtImpAutorizadoDolar.Text = lista[0].IMP_AUTORIZADO_DOLARES.ToString();
                txtnroDiasCredito.Text = lista[0].NRO_DIAS_CREDITO.ToString();
                txtNroUnidad2r.Text = lista[0].NRO_MAX_UNID_2R.ToString();
                txtNroUnidad3r.Text = lista[0].NRO_MAX_UNID_3R.ToString();
                txtFechaVencimiento.Date = lista[0].FEC_VENCIMIENTO.Date;
                cboBanco.Value = lista[0].ID_BANCO.ToString();

                clsTD_ClienteBL blCliente = new clsTD_ClienteBL();   
                Crosland.Automotriz.Entidad.TD_CLIENTE listaCliente=blCliente.Listar(Convert.ToInt32(lista[0].ID_CLIENTE.Value));
                txtCodigo.Text = listaCliente.COD_CLIENTE.ToString();
                txtCliente.Text = listaCliente.DES_CLIENTE.ToString();
                txtdepartamento.Text = listaCliente.Departamento.ToString();
                txtdistrito.Text = listaCliente.Distrito.ToString();
                txtdireccion.Text = listaCliente.DES_DIRECCION.ToString();
                txtprovincia.Text = listaCliente.Provincia.ToString();
            }
            
        }

        protected void gvBusqueda_PageIndexChanged(object sender, EventArgs e)
        {
            this.Buscar();
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            this.BuscarPorCodigo();
        }

        protected void btnAgregarRazonesSociales_Click(object sender, EventArgs e)
        {
            lblId_Cliente.Text = Convert.ToString(gvBusqueda.GetRowValues(gvBusqueda.FocusedRowIndex, "ID_CLIENTE"));
            txtCliente.Text = Convert.ToString(gvBusqueda.GetRowValues(gvBusqueda.FocusedRowIndex, "DES_CLIENTE"));
            txtdireccion.Text = Convert.ToString(gvBusqueda.GetRowValues(gvBusqueda.FocusedRowIndex, "DES_DIRECCION"));
            txtdepartamento.Text = Convert.ToString(gvBusqueda.GetRowValues(gvBusqueda.FocusedRowIndex, "Departamento"));
            txtprovincia.Text = Convert.ToString(gvBusqueda.GetRowValues(gvBusqueda.FocusedRowIndex, "Provincia"));
            txtdistrito.Text = Convert.ToString(gvBusqueda.GetRowValues(gvBusqueda.FocusedRowIndex, "Distrito"));
            txtCodigo.Text = Convert.ToString(gvBusqueda.GetRowValues(gvBusqueda.FocusedRowIndex, "COD_CLIENTE"));
            pcClientes.ShowOnPageLoad = false;
        }

        protected void gvBusqueda_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.Buscar();
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            if (!Validar())
            {

                if (Session["operacion"].ToString() == "N")
                {
                    this.Insertar();
                }
                else if (Session["operacion"].ToString() == "M") {

                    this.Modificar();
                }
            }

        }

        protected void grdOrganizacion_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            ListarOrganizacion();
        }

        protected void grdOrganizacion_PageIndexChanged(object sender, EventArgs e)
        {
            ListarOrganizacion();
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Vehiculos/wFrmCreditoClienteGarantia.aspx?id=3");
        }






        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e) { MensajesError(e.Message, e, "GuardarExceptionLog"); }
            catch (RunException re) { MensajesError(re.Message, re, "GuardarExceptionLog"); }
        }



        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }




    }
}